package com.support.annotation;

import java.lang.annotation.*;

/**
 * 自定义拦截器
 *
 * @author youshang
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface LocalRateLimiter {

    /**
     * 默认每秒生产1个令牌
     *
     * @return
     */
    double permitsPerSecond() default 1.0D;

    /**
     * 在创建时将预热期默认设置为100毫秒
     *
     * @return
     */
    long warmupPeriod() default 100L;

    /**
     * 默认一次性获得一个许可
     *
     * @return
     */
    int permits() default 1;

    /**
     * 默认获得许可的时间为100毫秒
     *
     * @return
     */
    long timeout() default 100L;

    /**
     * 指定降级方法
     * 注意，降级方法的请求参数以及返回参数必须和原先方法一致
     *
     * @return
     */
    String fallback() default "";
}
